package com.lottemall.search.pojo;

import lombok.Data;
import org.springframework.data.annotation.Id;
import org.springframework.data.elasticsearch.annotations.Document;
import org.springframework.data.elasticsearch.annotations.Field;
import org.springframework.data.elasticsearch.annotations.FieldType;

import java.util.Date;
import java.util.List;
import java.util.Map;
import java.util.Set;

/**
 * 创建一个类，封装要保存到索引库的数据，并设置映射属性：
 *
 * 我们这个索引库需要的数据目前如下
 *  SPU信息
 * - SKU信息
 * - SPU的详情
 * - 商品分类名称（拼接all字段）
 */
@Data
@Document(indexName = "goods", type = "docs", shards = 1, replicas = 0)
public class Goods {
    @Id
    private Long id; // spuId
    @Field(type = FieldType.Text, analyzer = "ik_max_word")
    private String all; // 所有需要被搜索的信息，包含标题，分类，甚至品牌
    @Field(type = FieldType.Keyword, index = false) //不进行分词、也不能进行搜索
    private String subTitle;// 卖点(比如鼠标移上去出现的那句话)

    //这几个都是用户搜索商品的时候进行过滤的几个字段
    private Long brandId;// 品牌id
    private Long cid1;// 1级分类id
    private Long cid2;// 2级分类id
    private Long cid3;// 3级分类id
    private Date createTime;// 创建时间
    private Set<Double> price;// 价格  这里弄集合使用为spu下有很多的sku


    @Field(type = FieldType.Keyword, index = false)
    private String skus;// sku信息的json结构  (当然这个可以不用，搜索一开始，其实通过异步的这里的spuId去数据库查询，我们这的玩法是用户搜索同时就查出商品数据)
    private Map<String, Object> specs;// 可搜索的规格参数，key是参数名，值是参数值
}